/*******************************************************************************
@copyright: 2025-2026, 汉威科技集团股份有限公司
@file:      PrivateProtocol.h
@version:   V1.0
@brief:     私有协议 
@warning:   无
@remarks:   1.私有协议版本号V1.00
            2.接收到数据需要先通过 n_PrivateUnpack 函数拆包后再使用ModbusRTU协议解析.
            3.ModbusRTU协议应答帧数据需要通过 n_PrivatePacket 函数封装后再发送.
            4.封包数据内存最小尺寸: 128 Bytes
            5.支持原位拆包/封包(原始数据内存地址与拆包/封包数据内存地址相同).
            6.文件编码类型UTF-8
 1.version: 1.0     author: MLF     date: 2025-05-10
   modification: 建立文档
*******************************************************************************/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef PRIVATE_PROTOCOL_H_
#define PRIVATE_PROTOCOL_H_

#include <QString>
#ifdef __cplusplus
 extern "C" {
#endif


/* Includes ------------------------------------------------------------------*/	   
#include <stdint.h>
#include <stdio.h>

/* Exported constants --------------------------------------------------------*/
/* Exported types ------------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported Init structure definition ----------------------------------------*/
/* External variables --------          \
                               ------------------------------------------------*/
/* Exported function prototypes ----------------------------------------------*/ 

/**
 * @brief  私有协议封装
 * @note   
 * @param[in]   acu8I_Src[]:  原始数据
 * @param[in]   u16I_SrcNum:  原始数据个数 
 * @param[in]   u16I_DstSize: 存放封装数据的缓存大小
 * @param[out]  au8O_Dst[]:   封装后数据
 * @param[out]  pu16O_DstLen: 封装后数据个数
 * @retval 0: 封装失败
 *         1: 封装成功
 */                        
int32_t x_PrivatePacket(uint8_t const acu8I_Src[],  \
                        uint16_t      u16I_SrcNum,  \
                        uint16_t      u16I_DstSize, \
                        uint8_t       au8O_Dst[],   \
                        uint16_t*     pu16O_DstLen);

/**
 * @brief  私有协议拆包
 * @note   
 * @param[in]   acu8I_Src[]:  原始数据包
 * @param[in]   u16I_SrcLen:  原始数据包长度
 * @param[in]   u16I_DstSize: 存放拆包数据的缓存大小
 * @param[out]  au8O_Dst[]:   拆包后的数据包
 * @param[out]  pu16O_DstLen: 拆包后的数据包长度
 * @retval 0: 拆包失败
 *         1: 拆包成功
 */
int32_t x_PrivateUnpack(uint8_t const acu8I_Src[],  \
                        uint16_t      u16I_SrcNum,  \
                        uint16_t      u16I_DstSize, \
                        uint8_t       au8O_Dst[],   \
                        uint16_t*     pu16O_DstLen);

#ifdef __cplusplus
}
#endif                        

#endif
/*******************************************************************************
                                   END FILE
*******************************************************************************/
